home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / exampleCode / opengl / lmwrap / igl / ui.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-11  |  10.3 KB  |  369 lines

  1. /*
  2.  * Copyright (c) 1995, Silicon Graphics, Inc.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee, provided
  6.  * that the name of Silicon Graphics may not be used in any advertising or
  7.  * publicity relating to the software without the specific, prior written
  8.  * permission of Silicon Graphics.
  9.  *
  10.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  11.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  12.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  13.  *
  14.  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
  15.  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
  17.  * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  *
  20.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  21.  */
  22. /*----------------------------------------------------------------------------
  23.  * 
  24.  * file   : ui.c 
  25.  * 
  26.  * Author : Yusuf Attarwala
  27.  * Date   : Apr 95
  28.  * 
  29.  *---------------------------------------------------------------------------*/
  30.  
  31. #include "Xmincludes.h"
  32. #include "globals.h"
  33. #include "lm.h"
  34. #include <Xm/Protocols.h>
  35.  
  36. static Arg args[40];
  37. static int argcnt;
  38.  
  39. static char *scrollCBs[] = {
  40.     XmNincrementCallback,
  41.     XmNdecrementCallback,
  42.     XmNdragCallback,
  43. };
  44.  
  45. static void lmodelCB(),
  46.             matCB(),
  47.         lightCB(),
  48.             toggleOffCB(),
  49.         resetView(),
  50.             toggleOnCB();
  51.  
  52. static char *lmodels[] =   {"Infinite",
  53.                             "Local",
  54.                 "Inf 2 Sided",
  55.                          };
  56.  
  57. static char *mats[] =   {"Brass  & Red Plastic",
  58.              "Silver & Grn Plastic",
  59.                          };
  60.  
  61. static char *lights[] =   {"White Inf Light",
  62.                "Red   Inf Light",
  63.                            };
  64.  
  65. static char *toggles[] = { "Tumble",
  66.                           };
  67.  
  68. static char *buttons[] =  {"Reset View",
  69.                            "Exit"};
  70.  
  71. extern void   doExit();
  72.  
  73. void 
  74. createMenus(parent)
  75. Widget parent;
  76. {
  77.  
  78.     int i;
  79.     Widget tb;
  80.     void buttonCB();
  81.     Widget form,lmodelFrame,matFrame,lightFrame,toggleFrame,buttonFrame;
  82.     Widget lmodelRB,matRB,lightRB,toggleRC,rc,rb,label,buttonRC;
  83.     Widget onOff[10][2];
  84.  
  85.     form = XtVaCreateManagedWidget("form",
  86.                             xmFormWidgetClass,parent,
  87.                             NULL);
  88.  
  89.     lmodelFrame  = XtVaCreateManagedWidget("ui",
  90.                      xmFrameWidgetClass, form,
  91.                      XmNleftAttachment,     XmATTACH_FORM,
  92.                      XmNleftOffset,         1,
  93.                      XmNtopAttachment,      XmATTACH_FORM,
  94.                      XmNtopOffset,          1,
  95.                      XmNrightAttachment,    XmATTACH_FORM,
  96.                      XmNrightOffset,        1,
  97.                      NULL);
  98.  
  99.     matFrame  = XtVaCreateManagedWidget("ui",
  100.                      xmFrameWidgetClass, form,
  101.                      XmNleftAttachment,     XmATTACH_FORM,
  102.                      XmNleftOffset,         1,
  103.                      XmNtopAttachment,      XmATTACH_FORM,
  104.                      XmNtopOffset,          1,
  105.                      XmNrightAttachment,    XmATTACH_FORM,
  106.                      XmNrightOffset,        1,
  107.                      XmNtopAttachment,      XmATTACH_WIDGET,
  108.                      XmNtopWidget,          lmodelFrame,
  109.                      NULL);
  110.  
  111.     lightFrame  = XtVaCreateManagedWidget("ui",
  112.                      xmFrameWidgetClass, form,
  113.                      XmNleftAttachment,     XmATTACH_FORM,
  114.                      XmNleftOffset,         1,
  115.                      XmNtopAttachment,      XmATTACH_FORM,
  116.                      XmNtopOffset,          1,
  117.                      XmNrightAttachment,    XmATTACH_FORM,
  118.                      XmNrightOffset,        1,
  119.                      XmNtopAttachment,      XmATTACH_WIDGET,
  120.                      XmNtopWidget,          matFrame,
  121.                      NULL);
  122.  
  123.     toggleFrame = XtVaCreateManagedWidget("ui",
  124.                      xmFrameWidgetClass, form,
  125.                      XmNleftAttachment,     XmATTACH_FORM,
  126.                      XmNleftOffset,         1,
  127.                      XmNtopAttachment,      XmATTACH_WIDGET,
  128.                      XmNtopWidget,          lightFrame,
  129.                      XmNrightAttachment,    XmATTACH_FORM,
  130.                      XmNrightOffset,        1,
  131.                      NULL);
  132.  
  133.     buttonFrame =    XtVaCreateManagedWidget("ui",
  134.                          xmFrameWidgetClass, form,
  135.                          XmNtopAttachment,    XmATTACH_WIDGET,
  136.                          XmNtopWidget,        toggleFrame,
  137.                          XmNleftAttachment,   XmATTACH_FORM,
  138.                          XmNleftOffset,         1,
  139.                          XmNrightAttachment,    XmATTACH_FORM,
  140.                          XmNrightOffset,        1,
  141.                          XmNbottomAttachment, XmATTACH_FORM,
  142.                          NULL);
  143.  
  144.  
  145.     lmodelRB  = XtVaCreateManagedWidget("lmodelRB",
  146.                   xmRowColumnWidgetClass, lmodelFrame,
  147.                   XmNpacking,             XmPACK_TIGHT,
  148.                   XmNradioBehavior,       True,
  149.                   XmNradioAlwaysOne,      True,
  150.                   XmNmarginWidth,         0,
  151.                   XmNmarginHeight,        0,
  152.                   NULL);
  153.  
  154.     matRB     = XtVaCreateManagedWidget("matRB",
  155.                   xmRowColumnWidgetClass, matFrame,
  156.                   XmNpacking,             XmPACK_TIGHT,
  157.                   XmNradioBehavior,       True,
  158.                   XmNradioAlwaysOne,      True,
  159.                   XmNmarginWidth,         0,
  160.                   XmNmarginHeight,        0,
  161.                   NULL);
  162.  
  163.     lightRB     = XtVaCreateManagedWidget("lightRB",
  164.                   xmRowColumnWidgetClass, lightFrame,
  165.                   XmNpacking,             XmPACK_TIGHT,
  166.                   XmNradioBehavior,       True,
  167.                   XmNradioAlwaysOne,      True,
  168.                   XmNmarginWidth,         0,
  169.                   XmNmarginHeight,        0,
  170.                   NULL);
  171.  
  172.     toggleRC = XtVaCreateManagedWidget("toggleRC",
  173.                   xmRowColumnWidgetClass, toggleFrame,
  174.                   XmNpacking,             XmPACK_TIGHT,
  175.                   XmNmarginWidth,         0,
  176.                   XmNmarginHeight,        0,
  177.                   NULL);
  178.  
  179.     for (i=0;i<XtNumber(lmodels);i++) {
  180.         tb  = XtVaCreateManagedWidget(lmodels[i],
  181.                            xmToggleButtonWidgetClass, lmodelRB,
  182.                            XmNspacing,    2,
  183.                            NULL);
  184.  
  185.     if (i==0) XmToggleButtonSetState(tb,True,True);
  186.         XtAddCallback(tb,XmNarmCallback,lmodelCB,(XtPointer)i);
  187.     }
  188.     for (i=0;i<XtNumber(mats);i++) {
  189.         tb  = XtVaCreateManagedWidget(mats[i],
  190.                            xmToggleButtonWidgetClass, matRB,
  191.                            XmNspacing,    2,
  192.                            NULL);
  193.  
  194.     if (i==0) XmToggleButtonSetState(tb,True,True);
  195.         XtAddCallback(tb,XmNarmCallback,matCB,(XtPointer)i);
  196.     }
  197.     for (i=0;i<XtNumber(lights);i++) {
  198.         tb  = XtVaCreateManagedWidget(lights[i],
  199.                            xmToggleButtonWidgetClass, lightRB,
  200.                            XmNspacing,    2,
  201.                            NULL);
  202.  
  203.     if (i==0) XmToggleButtonSetState(tb,True,True);
  204.         XtAddCallback(tb,XmNarmCallback,lightCB,(XtPointer)i);
  205.     }
  206.  
  207.     for (i=0;i<XtNumber(toggles);i++) {
  208.         rc = XtVaCreateManagedWidget("rc",
  209.                  xmRowColumnWidgetClass,toggleRC,
  210.                  XmNpacking,             XmPACK_TIGHT,
  211.          XmNmarginWidth,         0,
  212.          XmNmarginHeight,        0,
  213.          XmNorientation,         XmHORIZONTAL,
  214.          NULL);
  215.  
  216.         rb  = XtVaCreateManagedWidget("rb",
  217.                   xmRowColumnWidgetClass, rc,
  218.                   XmNpacking,             XmPACK_TIGHT,
  219.                   XmNradioBehavior,       True,
  220.                   XmNradioAlwaysOne,      True,
  221.                   XmNmarginWidth,         0,
  222.                   XmNmarginHeight,        0,
  223.           XmNorientation,         XmHORIZONTAL,
  224.                   NULL);
  225.  
  226.     onOff[i][0] = XtVaCreateManagedWidget("Off",
  227.               xmToggleButtonWidgetClass,rb,
  228.               NULL);
  229.     XmToggleButtonSetState(onOff[i][0],True,True);
  230.         XtAddCallback(onOff[i][0],XmNarmCallback,toggleOffCB,(XtPointer)i);
  231.     onOff[i][1] = XtVaCreateManagedWidget("On ",
  232.               xmToggleButtonWidgetClass,rb,
  233.               NULL);
  234.         XtAddCallback(onOff[i][1],XmNarmCallback,toggleOnCB,(XtPointer)i);
  235.  
  236.         XtVaCreateManagedWidget(toggles[i],
  237.               xmLabelGadgetClass,rc,
  238.               NULL);
  239.  
  240.     }
  241.  
  242.     buttonRC = XtVaCreateManagedWidget("buttonRC",
  243.                   xmRowColumnWidgetClass, buttonFrame,
  244.                   XmNpacking,             XmPACK_TIGHT,
  245.                   XmNmarginWidth,         0,
  246.                   XmNmarginHeight,        0,
  247.                   NULL);
  248.  
  249.     for (i=0;i<XtNumber(buttons);i++) {
  250.         tb  = XtVaCreateManagedWidget(buttons[i],
  251.                            xmPushButtonWidgetClass, buttonRC,
  252.                            XmNspacing,    2,
  253.                            NULL);
  254.         XtAddCallback(tb,XmNactivateCallback,buttonCB,(XtPointer)i);
  255.     }
  256.  
  257. }
  258.  
  259. static void
  260. toggleOffCB(w,i)
  261. Widget w;
  262. int i;
  263. {
  264.     switch(i) {
  265.     case 0 : 
  266.     animation(0);
  267.     doTumble = 0;
  268.     drawScene();
  269.     break;
  270.     }
  271. }
  272.  
  273. static void
  274. toggleOnCB(w,i)
  275. Widget w;
  276. int i;
  277. {
  278.     switch(i) {
  279.     case 0 : 
  280.     animation(1);
  281.     doTumble = 1;
  282.     drawScene();
  283.     break;
  284.     }
  285. }
  286.  
  287.  
  288. void
  289. buttonCB(w,which)
  290. Widget w;
  291. int which;
  292. {
  293.     switch(which) {
  294.     case 0 :
  295.     resetView();
  296.     drawScene();
  297.     break;
  298.     case 1 : 
  299.     doExit();
  300.     break;
  301.     }
  302. }
  303.  
  304.  
  305. static void
  306. lmodelCB(w,which)
  307. Widget w;
  308. int which;
  309. {
  310.     switch(which) {
  311.     case 0 :
  312.     curLModel = LTM_INFINITE;
  313.     drawScene();
  314.     break;
  315.     case 1 :
  316.     curLModel = LTM_LOCAL;
  317.     drawScene();
  318.     break;
  319.     case 2 :
  320.     curLModel = LTM_INF_TWO;
  321.     drawScene();
  322.     break;
  323.     }
  324. }
  325.  
  326. static void
  327. matCB(w,which)
  328. Widget w;
  329. int which;
  330. {
  331.     switch(which) {
  332.     case 0 :
  333.     curMatSet = MAT_BRASS;
  334.     drawScene();
  335.     break;
  336.     case 1 :
  337.     curMatSet = MAT_SILVER;
  338.     drawScene();
  339.     break;
  340.     }
  341. }
  342.  
  343. static void
  344. lightCB(w,which)
  345. Widget w;
  346. int which;
  347. {
  348.     switch(which) {
  349.     case 0 :
  350.     curLight = LT_INF_WHITE;
  351.     lmbind(LIGHT0,curLight);
  352.     drawScene();
  353.     break;
  354.     case 1 :
  355.     curLight = LT_INF_RED;
  356.     lmbind(LIGHT0,curLight);
  357.     drawScene();
  358.     break;
  359.     }
  360. }
  361.  
  362. static void
  363. resetView(w)
  364. Widget w;
  365. {
  366.     anglex = anglez = 0;
  367.     angley = 900;
  368. }
  369.